package cashpointer.web.action;

import cashpointer.web.support.PropertyStore;
import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import java.util.LinkedList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;

public class PrepareDiffAction extends ActionSupport {
    private PropertyStore propertyStore;
    private String version;
    private String output;

    @Override
    public String execute() throws Exception {
        // Sciezka do katalogu z plikami XML.
        String path = propertyStore.getPropertyByName("web.path-to-xml-files");
        String urlPath = propertyStore.getPropertyByName("web.url-to-xml-files");

        // Katalog z plikami XML.
        File dir = new File(path);

        // Lista pozniejszych wersji.
        List<String> laterVersions = new LinkedList<String>();

        // Przeszukanie katalogu w poszukiwaniu plikow z pozniejszymi wersjami.
        if (dir != null && version != null && Pattern.matches("\\d{8}\\.\\d{3}", version)) {
            String[] files = dir.list();
            if (files != null) {
                for (String filename : files) {
                    if (filename != null) {
                        if (!filename.startsWith("all.")) { // jesli nie zaczyna sie od "all." czyli cala reszta
                            // Wyszukiwanie i zapisywanie pozniejszych wersji.
                            if (version.compareTo(filename) < 0) {
                            	if (!laterVersions.contains(filename)) {
                            		laterVersions.add(filename);
                            	}
                            }
                        }
                    }
                }
            }
        }
        
        // Sortowanie kolekcji z wersjami.
		Collections.sort(laterVersions);
        
        // Tekst do wyswietlenia
        StringBuilder sb = new StringBuilder();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
        sb.append("<cashpointers>\n");

        // Czytam pliki [yyyyMMdd].[001-n]
        for (String version : laterVersions) {
            if (version != null && version.length() != 0) {
	        	try {
			        File file = new File(path + "/" + version);
			        if (file != null && file.exists()) {
			            sb.append("<file>");
			            sb.append("<version>"); // 20090416.012 - [version]
			            sb.append(version);
			            sb.append("</version>");
			            sb.append("<url>"); // http://address.pl/20090416.012 - [urlPath]/[version]
			            sb.append(urlPath);
			            sb.append(version);
			            sb.append("</url>");
			            sb.append("</file>\n");
			        }
	        	} catch (Exception e) {
	        		// polykam wyjatek
	        	}
            }
        }

        sb.append("</cashpointers>");

        output = sb.toString();

        return SUCCESS;
    }

    /* Akcesory */
    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getOutput() {
        return output;
    }

    public void setOutput(String output) {
        this.output = output;
    }

    public PropertyStore getPropertyStore() {
        return propertyStore;
    }

    public void setPropertyStore(PropertyStore propertyStore) {
        this.propertyStore = propertyStore;
    }
}
